package com.atguigu.e_reflect.test;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
/*
    框架代码
 */
public class UnderGroundDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
        //获取配置文件中 女朋友 写的信息 [哪个类,哪个方法]
        InputStream is =
                ClassLoader.getSystemResourceAsStream("com\\atguigu\\e_reflect\\test\\info.properties");//起点 : 当前模块src的根目录

        //使用属性集一键获取属性文件中的信息
        Properties properties = new Properties();

        properties.load(is);

        //获取属性集中 属性名所对应的属性值
        String className = properties.getProperty("className"); //全类名
        String methodName = properties.getProperty("methodName"); //方法名

        //反射代码 :
        //获取字节码对象
        Class<?> clazz = Class.forName(className);

        //获取类中成员方法对象
        Method method = clazz.getDeclaredMethod(methodName); //故意把方法设计成无参方法 -> 为了简单

        //创建className全类名指向的类的对象
        Object obj = clazz.newInstance();

        //方法启动
        Object result = method.invoke(obj); //可以启动方法了


        if (result != null){
            System.out.println("方法的结果是 : " + result);
        }
    }
}
